#include<bits/stdc++.h>
using namespace std;
#define int long long

struct node {
	int pos, det;
	bool operator < (const node &x) const {
//		if (pos != x.pos)
			return pos > x.pos;
//		else
//			return det > x.det;
	}
} a[100005];

bool cmp1(node x, node y) {
	return x.pos < y.pos;
}

bool cmp2(node x, node y) {
	return x.pos + x.det < y.pos + y.det;
}

signed main() {
	int n, m;
	cin >> n >> m;
	priority_queue<node> q;

	int mx_pos = -1, mn_pos = 1e10;

	for (int i = 1; i <= n; i++) {
		cin >> a[i].pos;
		mx_pos = max(mx_pos, a[i].pos);
		mn_pos = min(mn_pos, a[i].pos);
	}

	int mx = mx_pos - mn_pos;

	for (int i = 1; i <= n; i++) {
		cin >> a[i].det;
		q.push(a[i]);
	}

//	cout<<q.top().pos<<endl;

	while (m--) {
		node t = q.top();
		q.pop();

//		if(mx < max(t.pos+t.det, mx_pos)-q.top().pos){
//			cout<<mx;
//			return 0;
//		}

//		cout<<endl<<m<<endl;

		t.pos += t.det;
		q.push(t);

		mx_pos = max(mx_pos, t.pos);
		mx = min(mx_pos - q.top().pos, mx);
	}
//	sort(a+1, a+n+1, cmp1);
	cout << mx;
	return 0;
}
